import config from "../config/index.js"
/**
 * 封装一个异步的请求工具库
 * 基于 wx.request (ajax) 来实现axios的部分功能
 * 
 * 1.调用返回一个promise （以axios举例）
 * 
 * request({
 *  ...配置
 * }).then(res => {}).catch(err => {})
 * 
 * 
 * 2.配置基准路径
 * 
 * request.defaults.baseURL = "路径"
 * 
 * 
 * 3.错误拦截
 * 
 * request.onError(res => {
 *  // 处理错误
 * })
 *
 */



/**
 * 主函数
 * 
 * @params
 * 参数 | 类型 | 默认值
 * config | Oject | {}
 */
let requestList = [];
let authorization = ''; //token
let is_login = false;



// 小程序初始化登录
const firstLogin = () => {
	wx.login({
			provider: 'weixin',
			success: resLogin => {
				console.log("resLogin111111", resLogin)
				wx.request({
						url: `${request.defaults.baseURL}/account/login`,
						data: {
							code: resLogin.code
						},
						method: "POST",
						success: res => {
							console.log("apis", res)
							if (res.data.code === 200) {
								// authorization = 'Bearer ' + res.data.data.token;
								authorization = res.data.data.token;




								// 判断 // 0：出现邀请码的完善信息  1：出现普通的完善信息 2：隐藏
								if (res.data.data.needInviteCode) {

									if (res.data.data.inviteCode) {

										if (!res.data.data.isMember) {
											uni.setStorageSync('registerToast', 0);

										} else {
											uni.setStorageSync('registerToast', 2);
										}
									}
								} else {
									if (!res.data.data.isMember) {
										console.log('registerToast---->123',res.data.data.isMember)
										uni.setStorageSync('registerToast', 1);

									} else {
										uni.setStorageSync('registerToast', 2);
									}
								}
						
							console.log("个人信息成功", res)

						};
					}
				});
		}
	});
}



firstLogin();


const request = (config = {}) => {
	// 如果url开头没有http，加上基准路径
	if (config.url.search(/^http/) === -1) {
		// 给链接添加url，加上基准路径
		config.url = request.defaults.baseURL + config.url;
	}

	// 返回一个promise
	// resolve是 .then 里面的函数，一般请求成功时候执行
	// reject 是 .catch 里面的函数，一般用于请求失败时候执行
	return new Promise((resolve, reject) => {
		wx.showNavigationBarLoading();
		// authorization = uni.getStorageSync('token')
		// 发起请求
		wx.request({
			...config,
			header: {
				Authorization: authorization
			},
			success(res) {
				if (res.data.code === 401) {
					login(() => {
						request(config).then(res => {
							resolve(res);
						});
					});
				}
				// else if (res.data.code === 404) {
				// 	wx.redirectTo({
				// 		url: '/pages/error404/index'
				// 	});
				// 	resolve(res);
				// } 
				else if (res.data.code === 500) {
					wx.showToast({
						title: '系统繁忙',
						icon: 'none',
						mask: true,
						duration: 2000
					});
					resolve(res);
				} else if (res.data.code === 502 || res.data.code === 503 || res.data.code ===
					604) {
					wx.showToast({
						title: res.data.msg,
						icon: 'none',
						mask: true,
						duration: 2000
					});
					resolve(res);
				} else if (res.data.code === 505) {
					uni.redirectTo({
						url: "/pages/invite/invite"
					})
				}
				// else if (res.data.code === 506) {
					// uni.getStorageSync('registerToast', 0);
					// wx.showToast({
					// 	title: res.data.msg,
					// 	icon: 'none',
					// 	duration: 2000,
					// 	mask: true,
					// 	success: res => {
					// 		setTimeout(() => {
					// 			wx.navigateBack({
					// 				delta: 1
					// 			});
					// 		}, 2000);
					// 	}
					// });
				// }
				//  else if (res.data.code === 601) {
				// 	wx.showModal({
				// 		content: res.data.msg,
				// 		success: res => {
				// 			if (res.confirm) {
				// 				wx.navigateTo({
				// 					url: '/pages/bindPhone/index'
				// 				});
				// 			};
				// 		}
				// 	});
				// 	resolve(res);
				// } 
				else {
					// resolve(res);
					resolve(parseSuccessResponseData(res))
				};
			},
			fail(res) {
				reject(res);
			},
			// 不管成功失败都会执行
			complete(res) {
				wx.hideNavigationBarLoading()
				// 执行错误的兰截器
				request.errors(res);
			}
		})
	})
}

/**
 * request的默认属性
 */
request.defaults = {
	// 基准路径
	baseURL: config
		.url, // http://192.168.31.214:8089   https://emigrate.sweim.top   https://wxapp.bjeesa.cn https://wxapp.bjeesa.cn/emigrate-api
	editorURL: 'https://wxapp.bjeesa.cn'
}

/**
 * 存储错误的回调函数.默认是一个空的函数
 */
request.errors = () => {}

/**
 * request的错误拦截
 * 
 * @params
 * callback | 函数 
 */
request.onError = (callback) => {
	// 判断callback必须是一个函数
	if (typeof callback === "function") {
		// 如果是函数，保存到errors
		request.errors = callback
	}
}

// sessionid过时登录 token错误
const login = cb => {
	requestList.push(cb);
	if (!is_login) {
		is_login = true;
	} else {
		return
	}
	// 登录请求
	wx.login({
		success: resLogin => {
			console.log("resLogin222222", resLogin)
			provider: 'weixin',
				wx.request({
					url: `${request.defaults.baseURL}/account/login`,
					data: {
						code: resLogin.code
					},
					method: "POST",
					success: res => {
						if (res.data.code === 200) {
							authorization = res.data.data.token;
							
							// 判断 // 0：出现邀请码的完善信息  1：出现普通的完善信息 2：隐藏
							if (res.data.data.needInviteCode) {
							
								if (res.data.data.inviteCode) {
							
									if (!res.data.data.isMember) {
										uni.setStorageSync('registerToast', 0);
							
									} else {
										uni.setStorageSync('registerToast', 2);
							
									}
								}
							} else {
								if (!res.data.data.isMember) {
									uni.setStorageSync('registerToast', 1);
							
								} else {
									uni.setStorageSync('registerToast', 2);
								}
							}
							
							// authorization = 'Bearer ' + res.data.data.token;
							// 全部请求回调
							requestList.forEach(cb => {
								cb && cb();
							});
							requestList = [];
							is_login = false;
						};
					}
				});
		}
	});
}


const upload = (filePath) => {
	// 返回一个promise
	// resolve是 .then 里面的函数，一般请求成功时候执行
	// reject 是 .catch 里面的函数，一般用于请求失败时候执行
	return new Promise((resolve, reject) => {
		// 发起请求
		wx.uploadFile({
			url: request.defaults.baseURL + '/app/upload',
			filePath: filePath,
			name: 'file',
			header: {
				Authorization: authorization,
			},
			success(res) {
				let {
					code
				} = JSON.parse(res.data);
				if (code === 200) {
					resolve(res);
				} else {
					wx.hideLoading({});
					wx.showToast({
						title: '图片违规，请重新上传',
						icon: 'none'
					});
				};
			},
			fail(res) {
				reject(res);
			}
		});
	});
}

const checkUpload = (filePath) => {
	// 返回一个promise
	// resolve是 .then 里面的函数，一般请求成功时候执行
	// reject 是 .catch 里面的函数，一般用于请求失败时候执行
	return new Promise((resolve, reject) => {
		// 发起请求
		wx.uploadFile({
			url: request.defaults.baseURL + '/app/upload/check',
			filePath: filePath,
			name: 'file',
			header: {
				Authorization: authorization,
			},
			success(res) {
				resolve(res);
			},
			fail(res) {
				reject(res);
			}
		});
	});
}

const uploadOSS = (filePath, uploadUrl, formData) => {
	// 返回一个promise
	// resolve是 .then 里面的函数，一般请求成功时候执行
	// reject 是 .catch 里面的函数，一般用于请求失败时候执行
	return new Promise((resolve, reject) => {
		// 发起请求
		wx.uploadFile({
			url: uploadUrl,
			filePath: filePath,
			name: 'file',
			header: {
				Authorization: authorization,
			},
			formData: {
				...formData
			},
			success(res) {
				resolve(res);
			},
			fail(res) {
				reject(res);
			}
		});
	});
}

let globalData = {

}

/* 处理返回的格式*/
function parseSuccessResponseData(res) {
	return res.data || res.result
}

// 暴露
// export default request;
module.exports = {
	request: request,
	upload: upload,
	globalData: globalData,
	checkUpload: checkUpload,
	uploadOSS: uploadOSS
}
